home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / la50.arc / LA50.ASM next >
Assembly Source File  |  1985-05-25  |  10KB  |  295 lines

  1. page    62, 132
  2. title    LA50 -- LA50 Personal Printer Setup, Version 1.0
  3.  
  4. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
  5. ;                                                                            ;
  6. ; Program:    LA50                                                         ;
  7. ;                                                                            ;
  8. ; Purpose:    To provide an "easy-to-use", menu driven, setup program for  ;
  9. ;        the DEC LA50 Personal Printer.  Program allows user to set   ;
  10. ;        the horizontal pitch, vertical pitch and print density.  If  ;
  11. ;        you set the vertical pitch, the page length is automatically ;
  12. ;        set to the apprpriate number of line for an 11 inch page.    ;
  13. ;                                                                            ;
  14. ;        To create LA50.EXE issue the following commands in MS-Dos.   ;
  15. ;                                                                            ;
  16. ;            MASM LA50;                         ;
  17. ;            LINK LA50;                         ;
  18. ;                                                                            ;
  19. ;        The file LA50.EXE should contain 2234 bytes.             ;
  20. ;                                                                            ;
  21. ; Copyright:    (C) Copyright 1985 by Robert E. Davis, all rights reserved.  ;
  22. ;                                                                            ;
  23. ;        Members of the VAX Forum on CompuServe Incorporated's        ;
  24. ;        Consumer Information Service are granted a limited license   ;
  25. ;        to use and distribute this software, provided it contains    ;
  26. ;        this message, any enhancements or bug fixes made to the      ;
  27. ;        software are reported to:                     ;
  28. ;                                         ;
  29. ;            Robert E. Davis                         ;
  30. ;            %CompuServe Incorporated                 ;
  31. ;            P.O. Box 20212                         ;
  32. ;            Columbus, OH  43220                     ;
  33. ;                                                                            ;
  34. ;        and no compensation is received for the distribution of the  ;
  35. ;        software in either source or executable form.             ;
  36. ;                                                                            ;
  37. ;                                                                            ;
  38. ; Version 1.0        Robert E. Davis            May 24, 1985         ;
  39. ;                                                                            ;
  40. ;----------------------------------------------------------------------------;
  41.  
  42.  
  43. ;+
  44. ; Macro Definitions
  45. ;-
  46.  
  47. $Read_KBD_And_Echo  macro
  48.         mov        AH, 1
  49.         int        21H
  50.         endm
  51.  
  52. $Display_Char    macro        Character
  53.         mov        DL, Character
  54.         mov        AH, 2
  55.         int        21H
  56.         endm
  57.  
  58. $Print_Char    macro        Character
  59.         mov        DL, Character
  60.         mov        AH, 5
  61.         int        21H
  62.         endm
  63.  
  64. $Read_KBD    macro
  65.         mov        AH, 8
  66.         int        21H
  67.         endm
  68.  
  69. $Display    macro        String
  70.         mov        DX, offset String
  71.         mov        AH, 9
  72.         int        21H
  73.         endm
  74.  
  75. $Exit        macro        Code
  76.         mov        AL, Code
  77.         mov        AH, 4CH
  78.         int        21H
  79.         endm
  80.  
  81.  
  82. ;+
  83. ; Stack Segment Definition
  84. ;-
  85.  
  86. stack        segment byte stack
  87.         db        64 dup (?)
  88. stack        ends
  89.  
  90.  
  91. ;+
  92. ; Data Segment Definition
  93. ;-
  94.  
  95. data        segment
  96. Resp_Main    dw        Horz_Pitch, Vert_Pitch, Print_Dens, Exit
  97. Horz_Pitch_Tab    db        '568024'
  98. Vert_Pitch_Tab    db        '456123'
  99. Page_Len_Tab    db        '022033044066088132'
  100. Print_Dens_Tab    db        '12'
  101. Clear_Screen    db        27, '[2J', 27, '[H$'
  102. Clear_Menu    db        27, '[6;1H', 27, '[0J$'
  103. Program_Banner    db        27, '[2;1H'
  104.         db        27, '#3   LA50 Personal Printer Setup, V 1.0'
  105.         db        13, 10
  106.         db        27, '#4   LA50 Personal Printer Setup, V 1.0'
  107.         db        13, 10, 27, '[24;11H'
  108.         db        '(C) Copyright 1985 by Robert E. Davis, '
  109.         db        'all rights reserved.$'
  110. Enter_Choice    db        'Enter choice?  $'
  111. Menu1        db        27, '[06;31H', 'Main Menu'
  112.         db        27, '[08;31H', '1  Horizontal Pitch'
  113.         db        27, '[09;31H', '2  Vertical Pitch'
  114.         db        27, '[10;31H', '3  Print Density'
  115.         db        27, '[11;31H', '4  Exit'
  116.         db        27, '[13;31H$'
  117. Horz_Menu    db        27, '[06;27H', 'Horizontal Pitch Menu'
  118.         db        27, '[08;27H', '1  5 characters per inch'
  119.         db        27, '[09;27H', '2  6 characters per inch'
  120.         db        27, '[10;27H', '3  8 characters per inch'
  121.         db        27, '[11;27H', '4  10 characters per inch'
  122.         db        27, '[12;27H', '5  12 characters per inch'
  123.         db        27, '[13;27H', '6  16 characters per inch'
  124.         db        27, '[15;27H$'
  125. Vert_Menu    db        27, '[06;30H', 'Vertical Pitch Menu'
  126.         db        27, '[08;30H', '1  2 lines per inch'
  127.         db        27, '[09;30H', '2  3 lines per inch'
  128.         db        27, '[10;30H', '3  4 lines per inch'
  129.         db        27, '[11;30H', '4  6 lines per inch'
  130.         db        27, '[12;30H', '5  8 lines per inch'
  131.         db        27, '[13;30H', '6  12 lines per inch'
  132.         db        27, '[15;30H$'
  133. Dens_Menu    db        27, '[06;30H', 'Print Density Menu'
  134.         db        27, '[08;30H', '1  Draft density'
  135.         db        27, '[09;30H', '2  Enhanced density'
  136.         db        27, '[11;30H$'
  137. Error_A        db        27, '[20;20H', '? LA50 - Invalid choice <$'
  138. Error_B        db        27, '[20;46H', '> entered.'
  139.         db        27, '[22;29H', 'Enter <CR> to continue$'
  140. Bytes_Per_Word    db        2
  141. Char        db        (?)
  142. Len_Char    db        3 dup (?)
  143. data        ends
  144.  
  145. code        segment
  146.         assume        CS:code, DS:data, ES:data, SS:stack
  147.  
  148.         org        100h
  149.  
  150. Start        proc        far            ;+
  151.         mov        AX, data        ; Set up data segment
  152.         mov        DS, AX            ;   ........
  153.         $Display    Clear_Screen        ; Announce program
  154.         $Display    Program_Banner        ;   ........
  155.         jmp        Display_Main        ; Proceed to main menu
  156.                             ;
  157. Error_Main:    call        Error            ; Display error msg
  158.                             ;
  159. Main:        $Display    Clear_Menu        ; Clear old menu
  160. Display_Main:    $Display    Menu1            ; Prompt for function
  161.         $Display    Enter_Choice        ;   to be performed &
  162.         $Read_KBD_and_Echo            ;   accept response
  163.         xor        AH, AH            ; Determine if the
  164.         mov        Char, AL        ;   response was valid
  165.         cmp        AL, '1'            ; If not, process the
  166.         jl        Error_Main        ;   error
  167.         cmp        AL, '4'            ;   ........
  168.         jg        Error_Main        ;   ........
  169.         sub        AL, '1'            ; If so, convert to an
  170.         mul        Bytes_Per_Word        ;   offset into table
  171.         mov        BX, AX            ;   of routines
  172.         call        word ptr Resp_Main[BX]    ;   
  173.         jmp        Main            ; Return to main menu
  174.                             ;
  175. Start        endp                    ;-
  176.  
  177.  
  178. Horz_Pitch    proc                    ;+
  179.         jmp        HP_Menu            ; Proceed to menu
  180.                             ;
  181. Error_Horz:    call        Error            ; Display message if
  182.                             ;   invalid choice
  183. HP_Menu:    $Display    Clear_Menu        ; Clear old menu
  184.         $Display    Horz_Menu        ; Display horizontal
  185.         $Display    Enter_Choice        ;   pitch menu
  186.         $Read_KBD_and_Echo            ; Read user's choice
  187.         xor        AH, AH            ; Check validity of
  188.         mov        Char, AL        ;   response
  189.         cmp        AL, '1'            ; If not valid,
  190.         jl        Error_Horz        ;   process error
  191.         cmp        AL, '6'            ;   ........
  192.         jg        Error_Horz        ;   ........
  193.         sub        AL, '1'            ; If valid, make into
  194.         mov        BX, AX            ;   table offset
  195.         mov        AL, Horz_Pitch_Tab[BX]    ; Get pitch character
  196.         mov        Char, AL        ;   and save it
  197.         $Print_Char    1Bh            ; Send escape sequence
  198.         $Print_Char    5Bh            ;   for horizontal
  199.         $Print_Char    Char            ;   pitch change
  200.         $Print_Char    77h            ;   ........
  201.         ret                    ; Return to caller
  202. Horz_Pitch    endp                    ;-
  203.  
  204.  
  205. Vert_Pitch    proc                    ;+
  206.         jmp        VP_Menu            ; Proceed to menu
  207.                             ;
  208. Error_Vert:    call        Error            ; Display message if
  209.                             ;   invalid choice
  210. VP_Menu:    $Display    Clear_Menu        ; Clear old menu
  211.         $Display    Vert_Menu        ; Display vertical
  212.         $Display    Enter_Choice        ;   pitch menu
  213.         $Read_KBD_and_Echo            ; Read user's choice
  214.         xor        AH, AH            ; Check validity of
  215.         mov        Char, AL        ;   response
  216.         cmp        AL, '1'            ; If not valid,
  217.         jl        Error_Vert        ;   process error
  218.         cmp        AL, '6'            ;   ........
  219.         jg        Error_Vert        ;   ........
  220.         sub        AL, '1'            ; If valid, make into
  221.         mov        BX, AX            ;   table offset
  222.         mov        AL, Vert_Pitch_Tab[BX]    ; Get pitch character
  223.         mov        Char, AL        ;   and save it
  224.         mov        AX, 3            ; Get page length
  225.         mul        BX            ;   character
  226.         push        AX            ;   ........
  227.         $Print_Char    1Bh            ; Send escape sequence
  228.         $Print_Char    5Bh            ;   for vertical
  229.         $Print_Char    Char            ;   pitch change
  230.         $Print_Char    7Ah            ;   ........
  231.         $Print_Char    1Bh            ;   and for page
  232.         $Print_Char    5Bh            ;   length
  233.         pop        BX            ;
  234.         $Print_Char    Page_Len_Tab[BX]    ;   ........
  235.         $Print_Char    Page_Len_Tab[BX+1]    ;   ........
  236.         $Print_Char    Page_Len_Tab[BX+2]    ;   ........
  237. Next_Char:    $Print_Char    74h            ;   ........
  238.         ret                    ; Return to caller
  239. Vert_Pitch    endp                    ;-
  240.  
  241.  
  242. Print_Dens    proc                    ;+
  243.         jmp        PD_Menu            ; Proceed to menu
  244.                             ;
  245. Error_Dens:    call        Error            ; Display message if
  246.                             ;   invalid choice
  247. PD_Menu:    $Display    Clear_Menu        ; Clear old menu
  248.         $Display    Dens_Menu        ; Display print
  249.         $Display    Enter_Choice        ;   density menu
  250.         $Read_KBD_and_Echo            ; Read user's choice
  251.         xor        AH, AH            ; Check validity of
  252.         mov        Char, AL        ;   response
  253.         cmp        AL, '1'            ; If not valid,
  254.         jl        Error_Dens        ;   process error
  255.         cmp        AL, '2'            ;   ........
  256.         jg        Error_Dens        ;   ........
  257.         sub        AL, '1'            ; If valid, make into
  258.         mov        BX, AX            ;   table offset
  259.         mov        AL, Print_Dens_Tab[BX]    ; Get density char
  260.         mov        Char, AL        ;   and save it
  261.         $Print_Char    1Bh            ; Send escape sequence
  262.         $Print_Char    5Bh            ;   for print density
  263.         $Print_Char    Char            ;   change
  264.         $Print_Char    22h            ;   ........
  265.         $Print_Char    7Ah            ;   ........
  266.         ret                    ; Return to caller
  267. Print_Dens    endp                    ;-
  268.  
  269.  
  270. Exit        proc                    ;+
  271.         $display    Clear_Screen        ; Clear the screen
  272.         $Exit        0            ; Exit program
  273. Exit        endp                    ;-        
  274.  
  275.  
  276. Error        proc                    ;+
  277.         $Display    Error_A            ; Display invalid
  278.         cmp        Char, 20h        ;   choice message
  279.         jl        Err_B_Display        ;   ........
  280.         cmp        Char, 7Eh        ;   ........
  281.         jg        Err_B_Display        ;   ........
  282. Err_B_Display:    $Display_Char    Char            ;   ........
  283.         $Display    Error_B            ;   ........
  284. Cont_on_CR:    $Display_Char    7            ; Ring bell on error
  285.         $Read_KBD                ; Require <CR> to
  286.         cmp        AL, 13            ;   to continue
  287.         jne        Cont_on_CR        ;   ........
  288.         ret                    ; Return to caller
  289. Error        endp                    ;-
  290.  
  291.  
  292. code        ends
  293.         end        Start
  294.  
  295.